import axios from 'axios';
import { Message } from 'element-ui';
import router from '../router/index'
/*
 *  这里写一个读取配置文件的方法，原生ajax，同步读取文件
 */
const getConfigration = function (url) {
  let ajax = null;
  //判断ajax对浏览器支持情况
  if (window.XMLHttpRequest) {
    ajax = new XMLHttpRequest();
  }
  else if (window.ActiveXObject) {
    ajax = new window.ActiveXObject();
  }
  else {
    alert("您的浏览器不支持ajax");
  }
  if (ajax != null) {
    ajax.open("GET", `${url}?t=${Date.now()}`, false);
    ajax.send(null);
    ajax.onreadystatechange = function () {};
    return JSON.parse(ajax.responseText);
  }
};

export const config = getConfigration("./config.json");

let baseUrl = config.baseUrl;

//axios全局配置项
const request = axios.create({
  baseURL: baseUrl,
});
// axios.defaults.baseURL = baseUrl;
// axios.defaults.timeout = 120000;
// axios.defaults.withCredentials = true;

// axios拦截器
//请求拦截器
request.interceptors.request.use(config => {
  // 在发送请求之前做些什么
  if(window.localStorage.saToken) {
    config.headers['saToken'] = window.localStorage.saToken
  }
  return config;
}, error => {
  // 对请求错误做些什么
  return Promise.reject(error);
});

//添加响应拦截器
request.interceptors.response.use(response => {
  // 对响应数据做点什么
  if(response.data.code == 0) {
    return Promise.resolve(response.data);
  }
  if (response.data.code === 4101) {
    Message.error('请重新登陆')
    router.push({
      path: '/'
    })
  }
  else if (response.data.size > 0 ){
    // 导出文件流
    return Promise.resolve(response.data);
  }
  else {
    if(response.data.message) {
      Message.error(response.data.message);
    }
    else if(response.data.msg) {
      Message.error(response.data.msg);
    }
    else {
      Message.error("后台服务异常，请联系管理员！");
    }
    return Promise.reject(response);
  }
}, error => {
  // 对响应错误做点什么
  if (error.response) {
    let errorMsg = "后台服务异常，请联系管理员！";
    Message.error(errorMsg);
  }
  return Promise.reject(error);
});

//写一个函数来通过接口地址配置项分发请求
const getResources = actions => {
  let resource = {};
  for (let key in actions) {
    resource[key] = params => {
      let axiosOptions = {
        options: actions[key].options,
        method: actions[key].method
      };
      let regex = new RegExp("\\{[^}]*\\}", "g");
      let getParams = actions[key].url.match(regex);
      let url = actions[key].url;
      if (getParams) {
        getParams.map(item => {
          url = url.replace(item, params[item.substring(1, item.length - 1)]);
          return item;
        });
      }
      else {
        axiosOptions.data = params;
      }
      if(key == 'header') {
        /* axiosOptions.headers = {
          'Content-Type': 'application/x-www-form-urlencoded'
        } */
        axiosOptions.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
      }
      // 文件流相关接口
      if(actions[key] && actions[key].responseType) {
        axiosOptions.responseType = 'blob'
      }
      request.defaults.baseURL = baseUrl;
      axiosOptions.url = url;
      return request(axiosOptions);
    }
  }
  return resource;
};
// 登录相关
const loginActions = {
  // 获取单位列表（推送弹框）
  deptList: { url: "/clue/dept/list", method: 'get' },
  // 登录
  login: { url: "/index/login", method: 'post' },
  // 赛维讯2.0跳转-登录
  userLogin: { url: "/index/user?dwbm={dwbm}&rybm={rybm}", method: 'get' },
  // 登出
  loginout: { url: "/index/loginout", method: 'post' },
}
export const LoginResource = getResources(loginActions);

// 任务管理
const taskActions = {
  // 查询任务管理列表接口
  queryTaskManageList: { url: "/task/queryTaskManageList", method: 'post' },
  // 新增任务接口
  addTask: { url: "/task/addTask", method: 'post' },
  // 删除任务
  deleteTask: { url: "/task/deleteTask", method: 'post' },
  // 编辑任务
  updateTask: { url: "/task/updateTask", method: 'post' },
  // 查询任务信息
  queryTaskById: { url: "/task/queryTaskById", method: 'post' },
  // 模型列表
  getModelList: { url: "/model/all-enable", method: 'get' },
  // 数据集列表
  getdataSetList: { url: "/model/full/{modelId}", method: 'get' },
  // 根据任务id查询任务列表接口
  queryTaskLogListByID: { url: "/task/queryTaskLogListByID", method: 'post' },
  // 查询任务详情列表接口
  queryTaskDetailList: { url: "/task/queryTaskDetailList", method: 'post' },
  // 终止任务
  killTask: { url: "/task/mykill/{xxlLogId}", method: 'get' },
  // 任务详情页下载(右上角下载按钮)
  exportTaskLogDetail: { url: "/task/exportTaskLogDetail", method: 'post', responseType:'blob'},
}
export const TaskResource = getResources(taskActions);

// 线索管理
const clueActions = {
  // 线索管理分页查询(管理员
  list: { url: "/clue/list", method: 'post' },
  // 线索结果列表分页查询(管理员)
  result: { url: "/clue/list/result", method: 'post' },
  // 线索结果列表-设置权重
  setWeight: { url: "/clue/setWeight/{id}/{weight}", method: 'post' },
  // 删除线索
  deleteClue: { url: "/clue/{id}", method: 'delete' },
  // 线索结果列表-加入线索集-查询线索集（加入线索集弹框里面的）
  joinClue: { url: "/clue/{id}/{rybm}", method: 'get' },
  // 增加线索集线索关系（把线索加入到线索集）
  addClueInMap: { url: "/clue/addClueCollectionMap", method: 'post' },
  // 新建线索集
  addClue: { url: "/clue/addClueCollection", method: 'post' },
  // 成案反馈（线索结果列表（管理员））
  feedBackForClue: { url: "/clue/feedback", method: 'post' },
  // 线索集列表分页查询
  collectionListForAdmin: { url: "/clue/list/collection", method: 'post' },
  // 线索集列表-成案反馈
  feedBackForCollection: { url: "/clue/list/collection/feedback", method: 'post' },
  // 线索集列表-查看
  collectionDetail: { url: "/clue/list/collection/detail", method: 'post' },
  // 获取单位列表（推送弹框）
  deptList: { url: "/clue/userdept/list", method: 'get' },
  // 获取单位人员（推送弹框）
  deptRyList: { url: "/clue/dept/ry", method: 'post' },
  // 线索推送（推送弹框）
  cluePush: { url: "/clue/clue/push", method: 'post' },
  // 任务详情页下载（查看下载）、线索结果列表(左上角下载)
  exportClue: { url: "/clue/exportClue/{clueId}", method: 'get', responseType:'blob'},
  // 详情下载
  exportDetail: { url: "/clue/exportDetail/{id}", method: 'get', responseType:'blob'},
  // 查看下载
  exportInfo: { url: "/clue/exportInfo/{taskLogId}/{pointId}", method: 'get', responseType:'blob'},
  // 线索集下载
  exportCollection: { url: "/clue/exportCollection", method: 'post', responseType:'blob'},
  // 删除线索集
  collectionDelete: { url: "/clue/list/collection/{collectionId}", method: 'delete' },
  // 检察官个人
  // 线索管理分页查询(检查官个人)
  inquisitorPage: { url: "/clue/list/inquisitor/page", method: 'post' },
  // 线索管理分页查询(检查官个人)-成案反馈
  inquisitorFeedback: { url: "/clue/list/inquisitor/feedback", method: 'post' },
  // 线索集列表
  inquisitorClues: { url: "/clue/list/inquisitor/manage", method: 'post' },
  // 单个线索集（推送线索总览）-案件反馈
  allFeedback: { url: "/clue/list/inquisitor/manage/feedback", method: 'post' },
  // 检察官个人-线索集增加线索
  addMap: { url: "/clue/list/inquisitor/addMap", method: 'post' },
  // 新建线索集
  addInquisitorCollection: { url: "/clue/list/inquisitor/addInquisitorCollection", method: 'post' },
  // 查询线索集
  queryInquisitorCollection: { url: "/clue/list/inquisitor/queryInquisitorCollection/{rybm}", method: 'post' },
  // 查看监督点列表
  getPonitsList: { url: "/clue/info", method: 'post' },
  // 查看监督点列表(检察官)
  getinquisitorPonitsList: { url: "/clue/inquisitorInfo", method: 'post' },
  // 监督点下拉
  getPonits: { url: "/clue/getPonits/{taskId}", method: 'get' },
  // 根据推送id获取所有监督点
  getPonitsByPushId: { url: "/clue/getPonitsByPushId/{pushId}", method: 'get' },
  // 详情弹框
  getInfoData: { url: "/clue/info/{id}", method: 'get' },
  // 线索总览下载-检察官
  exportOverview: { url: "/clue/exportOverview", method: 'post', responseType:'blob'},
  // 查看下载-检察官
  exportChakan: { url: "/clue/exportChakan", method: 'post', responseType:'blob'},
}
export const ClueResource = getResources(clueActions);